参考这篇笔记了解 bagging&boosting 的基本概念. 在分类问题中, boosting 可以改变训练样本的权重, 学习多个分类器, 将他们进行线性组合.
1 AdaBoost 算法
1.1 基本思路
在满足 PAC 可学习性时, 我们可以定义
- 强可学习性: 存在多项式的学习算法可以较好的学习它;
- 弱可学习性: 学习的正确率仅好于随机猜测.
事实上可以证明, 强可学习和弱可学习等价, 因此我们需要把弱可学习 boost 为强可学习. 对于分类问题, 我们可以先学习一系列弱学习算法, 然后组合它们, 构成一个强分类器. AdaBoost 会每轮提高前一轮误分类样本的权值, 采取加权多数表决的方法.
1.2 AdaBoost 算法
依然假设训练集形如 , 其中 .
输入 ; 弱学习算法.
输出 最终分类器 .
- 初始化权值分布 :
- 对于 :
- 使用权值分布为 的训练集学习, 得到基本分类器
- 计算 的分类误差率
- 计算 的系数 .
- 更新权值分布
- 得到最终分类器
2 训练误差分析
当 , , 从而第一个不等号成立.
对于等号, 根据 AdaBoost 算法的更新公式, 得到 从而
其中 .
容易证明 . 这样 这样根据算法中 的定义式
从而不等式得证.
如果 , 则
这说明 AdaBoost 的训练误差是指数级下降的.
3 算法解释
3.1 前向分步算法 (Forward Stagewise Algorithm)
训练集 同前. 考虑加法模型 这里 为基函数, 为参数, 为系数. 给定训练数据和损失函数 , 只需要考虑最小化问题
这是一个复杂的优化问题. 但是前向分步算法希望每步只学习一个基函数, 简化优化复杂度. 也即, 每步优化
输入 , , .
输出 加法模型 .
- 初始化 .
- 对 :
- 极小化损失函数 得到 .
- 更新
- 得到加法模型
3.2 前向分步算法与 AdaBoost
下面的定理指出前向分步算法可以推出 AdaBoost.
AdaBoost 算法是基本分类器组成的加法模型, 损失函数是指数函数, 因此是前向分步算法的特例.
由于 AdaBoost 的算法学习 这就是加法模型的结构, 因此只需要证明在损失函数是 时, 表达式等价于 AdaBoost 的表达式.
假设经过 轮迭代的前向分步算法, 我们得到 且在第 轮迭代希望得到 : 也即
其中 , 与最小化无关. 在这个优化问题中, 它就是 AdaBoost 中的 . 然后, 参考 (2.3),
定义分类误差率 则带入已得到的 , 对 (*) 关于 求导, 得到 它就是 AdaBoost 中的 .
最后, 考察权值的更新. 由 , 带入 , 得 最后加上规范化因子就全部等价了.
4 提升树
基于分类树或者回归树基本分类器, 用前向分步算法得到的模型称为提升树 (Boosting Tree), 它是统计学习中性能最好的方法之一.
4.1 提升树模型
用 表示决策树, 为参数, 为数的个数, 则提升树模型可以表示为
4.2 提升树算法
代入前向分步算法, 得到
对于二分类问题, 将 限制为二分类树即可, 这就是 AdaBoost 算法的特殊情况. 接下来讨论回归问题的提升树.
现在对于 , 需要更改 . 回顾回归树, 将 划分为 个不相交的区域 , 在每个区域上确定输出的常量 , 则 其中 , 就是树的叶节点个数.
如果采用平方误差损失函数 , 则代入 (4.2) 这里 是当前拟合数据的残差. 所以, 的目标仅仅是拟合当前模型的残差.
输入
输出
- 初始化 .
- 对 ,
- 按 (4.3) 计算残差 .
- 拟合 学习回归树 .
- 更新 .
- 得到 .
4.3 梯度提升
对于一般损失函数, 每一步的优化可能并非像平方损失函数那样容易. 因此, 可以使用梯度提升 (gradient boosting), 关键是利用损失函数的负梯度在当前模型的取值
输入 , .
输出 回归树 .
- 初始化
- 对 ,
- 对 , 计算
- 对 拟合回归树, 得到第 棵树对叶结点区域为 .
- 对 , 计算
- 更新 .
- 得到回归树